231B - Magic Wizardry and Wonders - CodeForces Solution


constructive algorithms greedy *1500

Please click on ads to support us..

C++ Code:

#include<bits/stdc++.h>
using namespace std;
typedef long long int lint;
int main(){
    int n,d,l;
    cin>>n>>d>>l;
    int mi,ma,ami,ama;
    if(n%2==0){
        mi=1+d;
        ma=l+d;
        ami=((1-l)*((n-1)/2))+1;
        ama=((l-1)*((n-1)/2))+l;
    }
    else{
        mi=1-d;
        ma=l-d;
        ami=(1-l)*((n-1)/2);
        ama=(l-1)*((n-1)/2);
    }
    // cout<<ma<<" "<<mi<<" "<<ama<<" "<<ami<<endl;
    if(ami>ma || ama<mi){
        cout<<-1<<endl;
        return 0;
    }
    if(ami>=mi && ami<=ma){
        vector<int>ans(n);
        int j=0;
        for(int i=n-2;i>=0;i--){
            if(j%2==0){
                ans[i]=1;
            }
            else{
                ans[i]=l;
            }
            j++;
        }
        if(n%2==0)ans[n-1]=(ami-d);
        else ans[n-1]=(ami+d);
        for(int i=0;i<n;i++){
            cout<<ans[i]<<" ";
        }
        cout<<endl;
        // cout<<"h1"<<endl;
        return 0;
    }
    else if(ama>=mi && ama<=ma){
        vector<int>ans(n);
        int j=0;
        for(int i=n-2;i>=0;i--){
            if(j%2==0){
                ans[i]=l;
            }
            else{
                ans[i]=1;
            }
            j++;
        }
        if(n%2==0)ans[n-1]=(ama-d);
        else ans[n-1]=(ama+d);
        for(int i=0;i<n;i++){
            cout<<ans[i]<<" ";
        }
        cout<<endl;
        // cout<<"h2"<<endl;
        return 0;
    }
    else{
        vector<int>ans(n);
        int val=mi;
        int diff=mi-ami;
        int q=diff/(l-1);
        int r=diff%(l-1);
        int j=0;
        for(int i=n-2;i>=0;i--){
            if(j%2==0){
                if(q>0){
                    ans[i]=l;
                    q--;
                }
                else if(q==0 & r>0){
                    ans[i]=1+r;
                    r=0;
                }
                else{
                    ans[i]=1;
                }
            }
            else{
                if(q>0){
                    ans[i]=1;
                    q--;
                }
                else if(q==0 & r>0){
                    ans[i]=l-r;
                    r=0;
                }
                else{
                    ans[i]=l;
                }
            }
            j++;
        }
        ans[n-1]=1;
        for(int i=0;i<n;i++){
            cout<<ans[i]<<" ";
        }
        cout<<endl;
        // cout<<"h3"<<endl;
        return 0;
    }
    return 0;
}


Comments

Submit
0 Comments
More Questions

580A- Kefa and First Steps
1472B- Fair Division
996A - Hit the Lottery
MSNSADM1 Football
MATCHES Playing with Matches
HRDSEQ Hard Sequence
DRCHEF Doctor Chef
559. Maximum Depth of N-ary Tree
821. Shortest Distance to a Character
1441. Build an Array With Stack Operations
1356. Sort Integers by The Number of 1 Bits
922. Sort Array By Parity II
344. Reverse String
1047. Remove All Adjacent Duplicates In String
977. Squares of a Sorted Array
852. Peak Index in a Mountain Array
461. Hamming Distance
1748. Sum of Unique Elements
897. Increasing Order Search Tree
905. Sort Array By Parity
1351. Count Negative Numbers in a Sorted Matrix
617. Merge Two Binary Trees
1450. Number of Students Doing Homework at a Given Time
700. Search in a Binary Search Tree
590. N-ary Tree Postorder Traversal
589. N-ary Tree Preorder Traversal
1299. Replace Elements with Greatest Element on Right Side
1768. Merge Strings Alternately
561. Array Partition I
1374. Generate a String With Characters That Have Odd Counts